iT邦幫忙

2025 iThome 鐵人賽

DAY 2
0
自我挑戰組

C++ 還債之路:From basic to modern系列 第 2

Day2 C++工具包:編譯、除錯和函式庫管理

  • 分享至 

  • xImage
  •  

再繼續複習更多C++ 語法之前,我們先來看C++ 的開發工具。因為用C++開發不只是寫程式碼而已,要能夠順利完成一個專案,必須具備「編譯器」、「排版工具」、「編譯腳本工具」、「靜態檢查工具」、「動態除錯工具」以及「套件管理工具」。
今天主要來介紹這些工具,快速上手這些工具並使用工具幫忙調整coding style 跟挑出造成危險的程式碼。

編譯器

C++ 需要透過編譯器(compiler)將程式碼轉換成機器可以執行的二進位檔。

一個C++ 編譯流程簡單如下面所示

C++ source code --compiler frontend(token parser) --> IR(中間表示法)
--compiler backend(Optimizer) --> Assmbly Code --Assembler--> 
Object files(.o)--Linker(link 相依的libraries)--> Binary file

而編譯器其實已經可以將整個流程都封裝起來所以可以直接輸出Binary file

目前使用最廣泛的C++ 編譯器有Gnu GCC 的 g++、LLVM的 clang++ 以及微軟平台的MSVC++

  • GCC (GNU Compiler Collection):Linux 上最常見。

  • Clang/LLVM:Apple 生態系預設使用,也有很好的錯誤提示。

  • MSVC (Microsoft Visual C++):Windows 平台的主力。

可以去 cppreference Compiler Support 查到各個Compiler 對各版本C++ 的支援程度

選擇哪個編譯器,通常取決於你使用的作業系統與需求。但大多數情況下,Clang 與 GCC 都能提供跨平台的良好支援,近年來微軟對於跨平台的支援也是投入不少心力,在Windows 上做Cross-Compile 也是可以的。

排版工具 Clang-format

寫 C++ 時,團隊合作最怕的就是程式碼風格不一致。
clang-format 可以自動幫你排版程式碼,保持統一的縮排、括號風格與排版規則。

快速使用方式:

clang-format -i hello.cpp -style=Google

也可以在專案下建立 .clang-format檔,或是用 clang-format 直接生成

編譯腳本工具

當專案有數十個檔案時,手動編譯將是一場惡夢。這時候就需要 CMake 或 Makefile 這類編譯腳本工具。CMake 是一個跨平台的建置系統生成器,你只需寫一份簡潔的 CMakeLists.txt 檔案,它就能為你生成適用於不同平台的編譯腳本。

對於一個簡單的專案,你可以在專案根目錄建立 CMakeLists.txt 並執行以下指令來編譯:


mkdir build && cd build
cmake ..
make

靜態檢查工具:防患於未然的守門員

靜態檢查工具在程式碼運行前,透過分析程式碼本身來找出潛在的錯誤、漏洞或風格問題。

  • Sanitizer 是一系列內建於編譯器的檢查工具,專門用來偵測執行時期的記憶體錯誤和未定義行為。你只需在編譯時加上參數,例如:-fsanitize=address,undefined。通常搭配compiler 一起使用

  • Clang-tidy 用來檢查程式碼風格

  • Infer: Meta 開發用來專門分析資源洩漏和空指標問題。

動態除錯工具:找出運行時的錯誤邏輯

當程式碼運行時出現異常,動態除錯工具能讓你暫停程式,一步步追蹤變數的變化,找出邏輯錯誤。

GDB 和 LLDB 是強大的命令列除錯器,你可以使用 b(設定中斷點)、r(運行)、p(列印變數)等指令來逐步除錯。此外,Valgrind 是一款著名的記憶體除錯工具,最常用來偵測記憶體洩漏。

要使用 Valgrind 檢查記憶體洩漏,只需執行:

valgrind --leak-check=full ./your_program

C++ 套件管理

在大型專案中,管理第三方函式庫既耗時又容易出錯。套件管理工具能為你自動處理這類問題。

Vcpkg 是由微軟維護的跨平台套件管理工具,它支援超過 2000 個 C++ 函式庫,並能自動處理相依性。你只需執行 vcpkg install openssl 即可安裝。而 Conan 則是一個更具彈性的套件管理器,它強調二進制包管理,能大大節省編譯時間。

總結

一個高效的 C++ 開發者,不僅要會寫程式碼,更要善用這些強大的工具。從編譯器到除錯器,它們共同構成了一個完整的開發生態系統。透過今天的介紹,希望你能對這些工具的功能和用途有一個基本的了解。另外,由於時間的因素,截稿前只能用AI幫忙產內容,更細節的使用方法會再補充


上一篇
Day1 前言、學習資源和快速基本語法
系列文
C++ 還債之路:From basic to modern2
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言